#include "crc16.h"

/*
*	函数功能：		单个字符计算CRC
*	函数参数	：	1、要计算的字符
*				2、返回CRC值
*	函数返回值：无
*/
void  CalcCrc(char CrcBuf, unsigned short *pCrc)
{
	unsigned short g_uCode;
	*pCrc = *pCrc ^ CrcBuf;
	for(int  g_Counter1 = 0; g_Counter1 < 8; g_Counter1++ )
	{
		g_uCode = *pCrc & 1;
		*pCrc = *pCrc >> 1;
		*pCrc = *pCrc & 0x7fff;
		if( g_uCode == 1 )
			*pCrc = *pCrc ^ 0xa001;
		*pCrc = *pCrc & 0xffff;
	}
}
 
/*
*	函数功能：		计算指定字符串CRC16值
*	函数参数	：	1、计算CRC字符串地址
*				2、字符串长度
*	函数返回值：CRC16值
*/
unsigned short CRC16(char *pText, int DataLen)
{
	unsigned short m_wRtn = 0xffff;  
 
	for(int  g_Counter = 0; g_Counter < (int)DataLen; g_Counter++ )
		CalcCrc( pText[g_Counter], &m_wRtn );
 
	return m_wRtn;
}

